﻿var GMap = function (map) {
    this.map = map;
    this.adding = false;
    this.currPoly = null;
    this.areaList = {};
    google.maps.event.addListener(map, 'click', function(mouseEvent) {
        this.addAreaVertex(mouseEvent.latLng);
    });
};

GMap.prototype.addRegion = function () {
    var polygone = createPoly();
};

// Разрешение на добавление области.
GMap.prototype.enableAdding = function () {
    this.adding = true;
    if (!this.currPoly) {
        this.currPoly = this.createPoly();
    }
};

// Отмена добавления области.
GMap.prototype.disableAdding = function () {
    this.adding = false;
    if (this.currPoly) {
        this.currPoly.setMap(null);
        this.currPoly = null;
    }
};

// Сохранение добавленной области.
GMap.prototype.saveArea = function() {
    if (this.currPoly) {
        this.areaList.push(this.currPoly);
        this.currPoly = this.createPoly();
    }
};

// Начать заново добавление области.
GMap.prototype.startOverArea = function() {
    if (this.currPoly) {
        this.currPoly.setMap(null);
        this.currPoly = this.createPoly();
    }
};

GMap.prototype.createSimpleMarker = function (latLng) {
    var marker = new google.maps.Marker({
        position: latLng,
        map: this.map
    });
    return marker;
};

// Добавление новой вершины в область.
GMap.prototype.addAreaVertex = function (vertLatLng) {
    if (this.adding) {
        var path = this.currPoly.getPath();
        path.push(vertLatLng);
        var marker = this.createSimpleMarker(vertLatLng);
        if (path.length == 1) {
            google.maps.event.addListener(marker, 'click', function(event) {
                path.push(this.currPoly.getPath().getAt(0));
                this.currPoly = this.createPoly();
            });
        }
    }
};

// Показ выбранной области на всю карту.
GMap.prototype.fitArea = function(area) {
    var path = area.getPath();
    //var ws = path.getAt(0);
    //var ne = path.getAt(0);
    var latDown = path.getAt(0).lat();
    var latUp = latDown;
    var lngLeft = path.getAt(0).lng();
    var lngRight = lngLeft;
    for (var i = 0; i < path.length; i++) {
        var latlng = path.getAt(i);
        if (latlng.lat() < latDown) {
            latDown = latlng.lat();
        } else if (latlng.lat() > latUp) {
            latUp = latlng.lat();
        }
        if (latlng.lng() < lngLeft) {
            lngLeft = latlng.lng();
        } else if (latlng.lng() > lngRight) {
            lngRight = latlng.lng();
        }
    }

    var bounds = new google.maps.LatLngBounds(
        new google.maps.LatLng(latDown, lngLeft),
        new google.maps.LatLng(latUp, lngRight));

    this.map.fitBounds(bounds);
};

GMap.prototype.createPoly = function() {
    var poly = new google.maps.Polyline({
        map: map,
        strokeColor: "FF0000",
        strokeWeight: 2,
        strokeOpacity: 0.8,
        //editable: true,
        //fillColor: "00FF00"
    });
    return poly;
};



